darkowlom, точно, я несколько лет назад тоже пробовал эту модель - так же исчезала при определённом AoA. KaneThaumaturge, посмотри 38 комментарий в этой теме, может быть поможет.
Может надо переустановить варик? Просто в Way of Others'е у меня было именно так я переустановил его и всё нормально.
А карту сохранить в другой папке.
задержался немног
вобщем там в разделе глобалс указываешь равкоды и время,скил лучше скопируй
триггер скопируешь в свою мапу
и код лучше не читай(вредит зрению)
Идеальный вариант чтобы игрок сам мог решать, нужно ли ему это. Сделай, если будет смотреться неплохо. И каким то образом запилить возможность выключения этой фичи.
Урон настраивается через уровень способности, или как было сказано unit - damage target
команда для использования нестандартной способности берется от той способности, на основе которой ты её сделал, и если это цепь тралла - Unit - issue order with targetign a unit - orc - chain lighting
У нас 3 абилки могут отображать счетчик зарядов, совы охотницы, ракеты у осадных гномов и баг с техникой (подходит для пассивок)
Далее тока куча абилок с разными иконками..
Если я правильно понял, ты хочешь добавить в какой-либо массив юнита, который находится в триггере и соответствует некоторым условиям ( в данном случае tag = "Tag" и lvl = 5) ? Я тут использовал лист, т.к. с ним удобнее работать, но при желании ты можешь юзать статический массив.
код
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
public class Test : MonoBehaviour {
public List<GameObject> Units = new List<GameObject>();
void OnTriggerStay2D(Collider2D col)
{
if (col.tag == "Tag" || col.GetComponent<MyComponent>().lvl == 5)
{
Units.Add(col.gameObject);
}
}
создать.
направить на 128 точек наверх(90)
сделать неперманентным
текст удалится через 3 секунды
текст затухнет до 100% прозрачности через 3 секунды
Вот чёрт. не успел приплюснуть к посту.
еще раз - лучше скачать handle counter и посмотреть его показания, сколько объектов создается при касте
стремление сделать все безутечно похвально, но все хорошо в меру
скрин скинул выше, но там ошибка. И если раскрыть, то обнаруживается еще одна утечка: на гуи Point(0,0), а на jass эта команда называется по-другому Location(0,0), эта функция создает точку
раскрыть
попробуй раскрутить, и использовать эту
native CreateItem takes integer itemid, real x, real y returns item
через CS: call CreateItem( id, GetUnitX(u), GetUnitY(u))
где id - ид-номер типа предмета, u - юнит. Ввести тип предмета, и юнита нужно.
можно еще запомнить как-то, чтобы к предмету как-то обращаться
через CS: set it = CreateItem( id, GetUnitX(u), GetUnitY(u))
где it - переменная предмета. Объявить переменную и обращаться
Сначала, Хоффман, думал обозвать тебя лентяем, но потом не удивился, почему ты ничего не нашел !!!
Близзарди засунули ети текстуры очень глубоко:
в архиве War3x.mpq есть архивы с названиями в виде букв английского алфавита, так вот твои заветние текстуры ето Cliff0.blp и Cliff1.blp в архиве Z.mpq.
Как вариант - попытаться в одной текстуре клиффов попробовать разместить сразу два визуальных решения.
Текстуры клиффов находятся в mpq архиве по адресу ReplaceableTextures\Cliff\
Текстура клиффов
A. рандумные поверхности клиффов
B. тайлинг прямых граней, верхушка клиффа
C. тайлинг прямых граней, низ клиффа
D. угловые тайлы, выбирается 1 рандумный
E. угловые тайлы, низ клиффа
F. применяютя у мостов и подъёмников
Каждому клиффсету принадлежит два файла:
Угловатые клифы ReplaceableTextures\Cliff\Cliff0.blp
Прямые клифы ReplaceableTextures\Cliff\Cliff1.blp
Вроде всё правильно написал, если не прав поправьте.
Это давно обсуждалось. вопрос удаление события
Создание триггер события — 3 утечки. Стереть переменный триггер, и минус 1. Получается остается 2 утечки.
Вот если удалить юнита (Remove unit), то он стирается из события другого триггера?
Урон настраивается через уровень способности, или как было сказано unit - damage target
команда для использования нестандартной способности берется от той способности, на основе которой ты её сделал, и если это цепь тралла - Unit - issue order with targetign a unit - orc - chain lighting
ПРИКАЗ сначало юнит Б получает атаковать цель А. Может стоять далеко от нее, поэтому бежит поближе к цели А.
АНИМАЦИЯ Потом начинает замахиваться, производить анимацию атаки. Короче событие юнит атакован помогает сказать, когда начнется анимация атаки. Надо понимать, что она не сейчас производится, а будет через секунду. За это время можно успеть отменить атаку, или сменить анимацию атаки.
УРОН Событие юнит получает урон показывает. что юнит получил еще урона, а получит урон. Можно сделать всякие хитрости со здоровьем и прочее. Еще нужно знать. что "юнит атакован" не равно "юнит получает урон". Потому что например, если запустить стрелу. то прилетит не сразу. да и промахнутся можно
Юнит получил приказ атаковать - реагирует на того, кто получил приказ. И того кого хотят атаковать.
Юнит атакован - реагирует на того. кого атаковали. И на того. кто является инициатором атаки.
Получает урон - реагирует на того кто получил урон. И кто нанес. Еще можно узнать сколько нанесли урона.
дубль 2
"Юнит атакован" не равно "Юнит получил приказ атаковать". По логике все верно, но должен получить приказ, затем подбежать поближе, а потом ударить или стрельнуть.
"Юнит атакован" срабатывает в тот момент, когда начинает делать анимацию атаки (замах, начинает натягивать лук и прочее. У кого что.). Короче событие срабатывает, но анимация происходит через 0.00 секунд.
Когда юнит проигрывает анимацию атаки (клинком проникает глубже в противника, из лука вылетает стрела и летит, снаряды из мортир летят к цели, и прочее). Можно отменить приказом (только вот не знаю у ренживиков выпущенные снаряды продолжают летать), проверяй до момента получения урона получал какой-нибудь другой приказ.
"Юнит получает урон" - фиксирует получение урона. А это фиксирует, что атака была успешна, только более поздняя фиксация
quq_CCCP, а если за монстра дали 8 голды?) А если расходы?
(Upkeep)
Помочь тебе может такая функция - Игрок - Player score - золота добыто.
Когда изменяется количество золота игрока - можно сравнивать предыдущее значение добытого золота и текущее. (К счастью для тебя этот пункт не считает награду за уничтожение)
Проверкой на неуязвимость есть 2 версии проверки, одна требует мемхак а друга нет.
Там проверка на то что дамми юнит сможет нанести урон юниту или нет, если не сможет - юнит неуязвим.
Я думаю захват делается не так, как у тебя - у тебя захват будет мгновенный
Там нужна целая переменная на прогресс захвата, и переменные для подсчета юнитов с обеих команд для того чтобы найти скорость захвата
Это происходит из-за per-vertex освещения. От подобных визуальных артефактов очень сложно избавиться, но можно немного замаскировать их, подкорректировав модели освещения (например, немного уменьшить интенсивность diffuse освещения и увеличить ambient):
В War3 Model Editor, в окне настроек материалов убрать метку "незатенённый" или "незатуманенный" (лучше обе, а то там вроде как они местами перепутаны).
Обойти можно взятием цели камеры в переменную в момент нажатия стрелки и с последующим восстановлением цели камеры в исходной точке.
Установить Point - Цель текущей камеры
Камера - передвинуть камеру к Point в течение 0 сек.
Можно орудовать стрелками в т.ч. если зажать кнопкой мыши на мордашке двигающегося юнита.
Карта пример с управлением прилагается.
Способ топорный, но может натолкнёт на что...
скачиваете JNGP, устанавливаете его, открываете редактор jngp. открываете или создаете карту и работаете. короче снимает лимит. Однако, если сохраните в jngp и попробуете открыть обычным редактором. возможно карта не откроется, так как карта вышла за пределами лимита
в футах это вызвано тем, что там 100500 юнитов одновременно у игрока, а в мили возможно из-за лагов.
т.е. триггерно такое не сделаешь, недочёт самого движка.
ИИ стандартный, полагаю? Стандартному ИИ вроде как вижн не важен, он и так знает где все находятся, если мне не изменяет память. Как от него не прячься, найдет сразу. Если уж очень хочется - давать юнитов нейтралам и делать их союзным всем ботам. (игроков 16, если не изменяет память). Или давать союзным игрокам, при наличии. По крайней мере не будут мчаться в след за армией. Однако вполне могут быть более качественные решения проблемы, я стандартный ИИ не изучал, не могу быть уверен в офигительности предложенного решения. :)
Делаешь несколько условий, например если я правильно понял то
Событие отряда - юнит заходит в область
Устанавливаем условие - входящий юнит типа - или любой входящий юнит (зависит от того что ты хочешь )
далее через действия - отряд - выбрать всех юнитов в данной области и сделать действие - передать другому игроку ( идеально подойдет нейтрально враждебные) и так же пишешь отряд - выбрать всех в данной области и приказать идти нападая на противников (если это нейтралы то они будут нападать на всех кроме нейтрально пассивных ) и так далее.
И то чтобы контроль вернулся есть два варианта
1.Если в определенной области то если юнит заходит в область сменить владельца и цвет так же через отряд
2.Ну или например делаешь еще один тригер с таймером, в 1 тригере ставишь создать таймер который зазвонит - через (твое время ) - далее во втором тригере используешь таймер истекает - отряд (лучше конечно тогда использовать переменные на отряде ) и выбрать всех юнитов в отряде - сменить владельца (Игрок(Целая А)) как то так.
Я знаю что это координаты умник.. пустые придирки не прокатят
я не только про координаты, я про всё
короче судя по всему ты пытаешься написать прогу которая бы думала вместо тебя
и это очень пичально
поэтому я просто оставлю это здесь
Если во всех картах одинаковый id, значит покопайся в хеше.
Это как, можно в личку?
Проблему решил, переделав стандартную способность, а не создавая нестандартную. Это почти что панацея от подобных случаев, когда id (ещё называют raw-code) способности меняется.
Не boolean а booexpr - это фильтр для группы, там никакие локалка не нужны.
Саму группу можно перебирать в цикле что правда дает шанс попасть в лимит операций и грохнуть поток.
Делать нужно примерно вот так :
function OnlyEnemyGroundAlive takes nothing returns boolean
return GetUnitState( GetFilterUnit(), UNIT_STATE_LIFE )> 0.405 and IsUnitEnemy( GetFilterUnit(), bj_groupEnumOwningPlayer ) and IsUnitType( GetFilterUnit(), UNIT_TYPE_GROUND )
endfunction
function DamageEnemy takes nothing returns nothing
call UnitDamageTarget( bj_lastReplacedUnit, GetEnumUnit(), 100.00, false, false, ATTACK_TYPE_NORMAL, DAMAGE_TYPE_COLD, WEAPON_TYPE_WHOKNOWS )
endfunction
function Temp takes nothing returns nothing
local group grp = CreateGroup( ) //создаём группу юнитов
local real dx = 0.00 // координата x
local real dy = 0.00 // координата y
set bj_groupEnumOwningPlayer == Player(0) // глобальная переменная чтобы передать данные в фильтр
call GroupEnumUnitsInRange( grp, dx, dy, 512.00, Condition( function OnlyEnemyGroundAlive) )
set bj_lastReplacedUnit = GetTriggerUnit( )// глобальная переменная чтобы передать данные в другую функцию.
call ForGroup( grp, function DamageEnemy )
call DestroyGroup( grp )
set grp = null
endfunction
у тебя есть несколько проблем:
1)у тебя точка не удаляется и зависает в памяти что даёт утечки(лаги)
2)у тебя не устанавливается группа что даёт утечки(лаги) + нельзя отследить людей в ней
3)у тебя создаётся спецэффект, но не удаляется что даёт утечки(лаги)
Нужно создать переменную типа Отряд(то есть группа):
назвать её допустим GROUP
Нужно создать переменную типа Боевая единица:
назвать её допустим UNIT
нужно сделать так:
в триггере где событие ПРИМЕНЯЕТ СПОСОБНОСТЬ создать действие:
установить применяющий юнит = UNIT
установить FireStrike = случ точка в области Fire strike
установить группу GROUP = юниты в области 300 от Fire strike соответствующий юнит не равно UNIT
создать эффект
удалить эффект
call RemoveLocation(udg_FireStrike)
call DestroyGroup(udg_GROUP)
Bornikkeny, сделал специально чтобы доказать тебе что ты несёшь бред
даже 2 скрина приложил
думаю закинуть библиотеки сможешь сам (в папку *твой jngp*\AdicHelper\lib)
Хорошо группы реализуешь как альтернативу unit[array]. Я тоже самое получил. nvc123, и всё же твой хук не тот что мне нужен.
Я решил проблему, спасибо что дал идею обрабатывать движение внутри структуры, а не в стеке.
кот
library Hook initializer Init_Hook uses LibMath
globals
mhook ahook[100]
integer ihook = -1
endglobals
struct mhook
unit host = null
unit target = null
real face = 0
real speed = 0
real dis = 0
real dismax = 0
integer chaini = 0
unit chain[50]
real scale = 0
integer move = 1
integer i = 0
static method Create takes unit host, real tx, real ty, real scale returns mhook
local mhook h = mhook.create()
local integer i = GetPlayerId(GetOwningPlayer(host))
local real x = GetUnitX(host)
local real y = GetUnitY(host)
local real f = GetAngleXY(x,y,tx,ty)
set h.host = host
set h.face = f
set h.speed = 600
set h.dismax = 1400
set h.scale = scale
set h.chain[0] = CreateUnit(Player(i),'h007',GetPolarX(GetUnitX(host),f,h.scale/2),GetPolarY(GetUnitY(host),f,h.scale/2),f)
set h.i = i
call UnitAddAbility(h.chain[0],'Amrf')
call UnitAddAbility(h.chain[0],'Amrf')
call SetUnitFlyHeight(h.chain[0],50,0)
call SetUnitPathing(h.chain[0],false)
return h
endmethod
method Start takes nothing returns boolean
if ihook < 1000 then
set ihook = ihook + 1
set ahook[ihook] = this
return true
else
return false
endif
endmethod
method Destroy takes nothing returns nothing
local integer i = 0
loop
exitwhen i > ihook
if ahook[i] == this then
set ahook[i] = ahook[ihook]
set ahook[ihook] = 0
set ihook = ihook - 1
set i = ihook // выход из цикла
endif
set i = i + 1
endloop
set this.target = null
set this.host = null
call this.destroy()
endmethod
method Move takes nothing returns nothing
local integer i1 = 0
local integer l = 0
local real x
local real y
local real xh
local real yh
local real f
if move == 1
set dis = dis + speed*0.025
loop
exitwhen i1 > .chaini
set x = GetUnitX(.chain[i1])
set y = GetUnitY(.chain[i1])
if i1 > 0 then
set f = GetAngleXY(x,y,GetUnitX(.chain[i1-1]),GetUnitY(.chain[i1-1]))
call SetUnitX(.chain[i1],GetPolarX(x,f,.speed*0.025))
call SetUnitY(.chain[i1],GetPolarY(y,f,.speed*0.025))
else
set f = face
call SetUnitX(chain[i1],GetPolarX(x,f,.speed*0.025))
call SetUnitY(chain[i1],GetPolarY(y,f,.speed*0.025))
endif
call SetUnitFacing(chain[i1],f)
set i1 = i1 + 1
endloop
set x = GetUnitX(chain[chaini])
set y = GetUnitY(chain[chaini])
set f = GetAngleXY(GetUnitX(.host),GetUnitY(.host),x,y)
set xh = GetPolarX(GetUnitX(.host),f,.scale/2)
set yh = GetPolarY(GetUnitY(.host),f,.scale/2)
//Create==================
if GetDisXY(xh,yh,x,y) >= .scale/2 then
set chaini = chaini + 1
set chain[chaini] = CreateUnit(Player(.i),'h007',xh,yh,f)
call UnitAddAbility(.chain[.chaini],'Amrf')
call UnitAddAbility(.chain[.chaini],'Amrf')
call SetUnitFlyHeight(.chain[.chaini],50,0)
endif
if dis > dismax then
set move = 0
endif
else
//REVERSE=============
set xh = GetUnitX(host)
set yh = GetUnitY(host)
set chain[chaini+1] = host
loop
exitwhen l > chaini
set x = GetUnitX(chain[l])
set y = GetUnitY(chain[l])
//if chain[chaini] == null then
// set f = GetAngleXY()
//endif
set f = GetAngleXY(x,y,GetUnitX(chain[l+1]),GetUnitY(chain[l+1]))
call SetUnitX(chain[l],GetPolarX(x,f,speed*0.025))
call SetUnitY(chain[l],GetPolarY(y,f,speed*0.025))
call SetUnitFacing(chain[l],f-180)
set l = l + 1
endloop
//Destroy==================
set x = GetUnitX(chain[chaini])
set y = GetUnitY(chain[chaini])
set xh = GetUnitX(host)
set yh = GetUnitY(host)
if GetDisXY(GetUnitX(chain[chaini]),GetUnitY(chain[chaini]),GetUnitX(host),GetUnitY(host)) < 100 then
call RemoveUnit(chain[chaini])
set chain[chaini] = null
set chaini = chaini - 1
if chaini == -1 then
call .Destroy()
endif
endif
endif
endmethod
endstruct
private function Engine takes nothing returns nothing
local integer i = 0
local mhook h
local group g
local unit t
loop
exitwhen i > ihook
if ahook[i] != 0 then
set h = ahook[i]
//--run--//
call h.Move()
else
set ahook[i] = ahook[ihook]
set ahook[ihook] = 0
set ihook = ihook - 1
set i = i - 1
endif
set i = i + 1
endloop
//call DestroyGroup(g)
set g = null
set t = null
endfunction
function Trig_HookC_Bool takes nothing returns boolean
if GetSpellAbilityId() == 'A01D' then //Способность Мясной хук
return true
else
return false
endif
endfunction
function Trig_HookC_Actions takes nothing returns nothing
local mhook h
set h = mhook.Create(GetSpellAbilityUnit(),GetSpellTargetX(),GetSpellTargetY(),110)
call h.Start()
endfunction
function Init_Hook takes nothing returns nothing
local trigger t = CreateTrigger()
call TriggerRegisterAnyUnitEventBJ( t, EVENT_PLAYER_UNIT_SPELL_EFFECT )
call TriggerAddAction( t, function Trig_HookC_Actions )
call TriggerAddCondition(t,function Trig_HookC_Bool)
call TimerStart(CreateTimer(),0.025,true,function Engine)
endfunction
endlibrary
Здесь не делают заказы. Насколько помню есть специальные темы для заказов. Но совершенно случайно у меня оказалась пара свободных минут
Импортировать TerrainArt\Ruins\*.blp
Вот. Есть текст про описание движения как я понял (вот в чем разница между конным и пешим пока тоже не понял, интересует вот, что дает конный)
Эти паффинги, и типы движения взаимосвязаны. У некоторых есть баги, которыми можно воспользоваться. Например, чтобы летающие юниты игнорили ландшафт и летели прямо (вот на клифах может быть криво). На форуме дофига такого. Также можно сделать нелетающих летающими, дать сфинкс или превратиться в ворона (тоже баг) Ну и так далее
» WarCraft 3 / Анимирование
» WarCraft 3 / Dissipate
» WarCraft 3 / Compile error.
» WarCraft 3 / Способность с зарядами.
» Unity / Поиск объекта
» WarCraft 3 / Отмена приказа предмета
» WarCraft 3 / war3mapImported
» WarCraft 3 / Утечки
» WarCraft 3 / Текстура склона
» WarCraft 3 / Событие на получение урона
» WarCraft 3 / нужна модель
» WarCraft 3 / Как отследить?
» WarCraft 3 / Проблема с освещением
» WarCraft 3 / Горячая клавиша предмету
» WarCraft 3 / Камера
» WarCraft 3 / Ограничение на количество войск
» WarCraft 3 / Контроль юнитов врага
» WarCraft 3 / Ошибка в коде?
» WarCraft 3 / Проблема со способностью
» WarCraft 3 / Пути